<?php
/**
 * 모든 클래스의 기본 클래스
 *
 * @package php.lang
 */


/**
 * 모든 클래스의 기본 클래스
 *
 * @package php.lang
 */
class PObject {

	/** 
	 * 생성자 
	 */
	public function __construct() {} 
	
	/**
	 * 객체 비교 (수정 필요)
	 * 
	 * @param	object $obj 비교할 객체 
	 * @return	boolean		true : 같음, false : 다름
	 *
	 */
	public function equals($obj) {
		return ($this === $obj);
	}
	
	/**
	 * 객체 확인
	 * 
	 * @param	object $obj 비교할 객체 
	 * @param	string $class 비교할 클래스, 기본값 : PObject  
	 * @return	boolean			true : 같음, false : 다름
	 *
	 */
	public static function isObject($obj, $class = 'PObject') {
		return is_a($obj, $class);
	}

	/**
	 * 객체인지 아닌지 판별해서 PObject 형 객체이면 toString() 메소드로 문자열을 
	 * 반환하고 일단 자료형이면 그 형태 그대로 리턴한다 
	 * 
	 * @param	object $obj	비교할 객체 
	 * @param	string $class 비교할 클래스, 기본값 : PObject  
	 * @return	mixed		객체 값
	 *
	 */
	public static function getObjValue($obj, $class = 'PObject', $method = "toString") {
		return (PObject::isObject($obj, $class)) ? call_user_func(array($obj, $method)) : $obj;
	}

	/** 
	 *  객체 문자열로 변환 
	 * 
	 * @return	mixed			객체의 문자열 값 
	 */

	public function toString() {
		return "Class : " . get_class($this);
	}

	public function getClass() { 
		return get_class($this);
	}

	/**
	 * magic methods 추가 , toString() 의 값을 그대로 리턴한다. 
	 * 
     * 이 메소드를 정의 해놓으면 객체 값을 테스트 할 때 
	 *  <code> echo $object; </code>
	 * 와 같은 형식으로 바로 볼 수 있다는 점.
	 *
	 * @return	mixed			객체의 문자열 값 
	 */
	public function __toString()
	{
		return $this->toString();
	}

	/** 
	 * 객체 문자열을 출력
	 * 
	 */
	public function display() {
		echo $this->toString();
	}
}
?>